1. Field of the Invention
The present invention relates to computer program performance analysis and more particularly to plot view generation for method execution performance.
2. Description of the Related Art
In software engineering, performance testing determines how fast some aspect of a computing application performs under operating conditions. Performance testing also validates and verifies other attributes of the computing application, for example the scalability, reliability and resource usage of the computing application. Importantly, in some circumstances, performance testing of a computing system is intended to demonstrate that the computing application meets particular performance criteria, often specified by the end user. In other circumstances, performance testing measures those segments of the computing application causing the computing application to perform poorly. In the latter circumstance, profiling and debugging tools identify portions of the computing application contributing most to the poor performance.
A popular debugging tool used in performance testing is the trace tool. While the process of tracing can range from the rudimentary placement of print statements in source code to trace the flow of execution of a computer program, advanced forms of tracing provide for the dynamic visual notation of source code under execution so as to indicate to the developer where in the source code a run time error has occurred. In particular, in tracing through source code while monitoring or “watching” variables of interest, the values of the variables can be compared to expected values at the execution of each line of source code so as to identify unexpected values resulting from run time errors.
While tracing has its origins in debugging, tracing also enjoys a prominent place in performance testing of a computer program. Specifically, the trace function has been used to identify when a method (also referred to in the art as a “function”) has been invoked and when the method has completed operation. Thus, the trace function can be used to measure a time of performance for a traced method. Methods consuming excessive time to execute can be readily identified, modified and then monitored to measure the impact of any changes on the time to perform the method. To facilitate an understanding of the time consumed in invoking a method to completion, it is common to graph the results on a bar chart in which the position of a line on the x-axis of the chart reflects a time of invocation of a method and the amplitude reflects a time to perform the method. Operationally, a trace function can record the time when the method is invoked in the source code and the trace function subsequently can record when the method exits. The data produced by the trace functions can be provided to the graph to visually indicate the time to execute the method.
Conventional modes of visually plotting the time of performance of a method can account for the single invocation of the method, however, the recursive invocation of the method—that is the invocation of the method from within the method—will not be apparent from the visual plot. Rather, for the casual observer, a root invocation of the method will appear to incur substantial delays in performing, while nested children invocations will register improving temporal performance. A conclusion will then be drawn in error, that some external factor has caused initial poor performance eventually resolved when in fact, as the recursive calls to the method unwind towards the root invocation of the method, the time to performance will appear to improve as well.